package com.legendshop.openportal.sdk.model.response.v4;

import com.legendshop.openportal.sdk.model.BaseResponse;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * @author jzh
 * @version 1.0.0
 * @title AfterSaleInfoResponse
 * @date 2024/6/29 17:42
 * @description：售后信息响应
 */
@Data
public class AfterSaleInfoV4Response extends BaseResponse {

    private static final long serialVersionUID = 6729547031829521132L;

    /**
     * 微信unionId
     */
    @ApiModelProperty("微信unionId")
    private String wxUnionId;

    /**
     * 售后单
     */
    @ApiModelProperty("售后单号")
    private String refundSn;

    /**
     * 第三方申请单号
     */
    @ApiModelProperty("第三方申请单号")
    private String thirdApplyNo;

    /**
     * 订单
     */
    @ApiModelProperty("订单号")
    private String subNumber;

    /**
     * 订单商品ID,全部退款是0,默认0
     */
    @ApiModelProperty("订单商品ID，全部退款是0，默认0")
    private Long prodId;

    /**
     * 订单SKU ID,全部退款是0,默认0
     */
    @ApiModelProperty("订单SKU ID，全部退款是0，默认0")
    private Long skuId;

    /**
     * 申请状态 : AfterSaleApplyStatusEnum
     */
    @ApiModelProperty("申请状态")
    private Integer applyState;

    /**
     * 服务类型，即是售后类型 OrderAfterSaleServiceTypeEnum 仅退款 REFUND 1 退款退货 REFUND_GOODS 2 换货 EXCHANGE 3 维修 MAINTAIN 4
     */
    @ApiModelProperty("服务类型，即是售后类型  仅退款 REFUND 1 退款退货 REFUND_GOODS 2 换货 EXCHANGE 3 维修 MAINTAIN 4")
    private Integer serviceType;

    /**
     * 售后申请时间
     */
    @ApiModelProperty("售后申请时间")
    private Date applyTime;

    /**
     * 申请退款原因
     */
    @ApiModelProperty("申请退款原因")
    private String buyerMessage;

    /**
     * 售后申请图片凭证
     */
    @ApiModelProperty("售后申请图片凭证")
    private List<String> photoFiles;

    /**
     * 申请退货数量
     */
    @ApiModelProperty("申请退货数量")
    private Integer applyNum;

    /**
     * 申请退款金额
     */
    @ApiModelProperty("申请退款金额")
    private BigDecimal applyRefundAmount;

    /**
     * 退货数量
     */
    @ApiModelProperty("退货数量")
    private Integer refundNum;


    /**
     * 真实退款金额
     * 申请状态为已完成后，才会有值，其余时候都为 0
     */
    @ApiModelProperty("真实退款金额")
    private BigDecimal realRefundAmount;

    /**
     * 退货地址
     * 退货方式为客户发货，并且商家同意退货（不弃货）时会返回
     */
    @ApiModelProperty("退货地址")
    private String returnGoodsAddress;

    /**
     * 退货联系人
     * 退货方式为客户发货，并且商家同意退货（不弃货）时会返回
     */
    @ApiModelProperty("退货联系人")
    private String returnGoodsContacts;

    /**
     * 退货联系人手机号
     * 退货方式为客户发货，并且商家同意退货（不弃货）时会返回
     */
    @ApiModelProperty("退货联系人手机号")
    private String returnGoodsPhone;

    /**
     * 退款方式列表
     * 需要在queryExts字段携带 refundType 标识
     */
    @ApiModelProperty("退款方式列表")
    private List<RefundType> refundTypes;

    /**
     * 退款方式
     */
    @Data
    public static class RefundType implements Serializable {
        
        private static final Long serialVersionUID = 1L;

        /**
         * 退款类型
         * PayTypeEnum
         */
        @ApiModelProperty("退款类型")
        private String refundTypeId;

        /**
         * 退款类型名称
         */
        @ApiModelProperty("退款类型名称")
        private String refundTypeName;

        /**
         * 退款金额
         */
        @ApiModelProperty("退款金额")
        private BigDecimal refundAmount;

        /**
         * 退款数量，如：积分数量
         */
        @ApiModelProperty("退款数量，如：积分数量")
        private Integer refundNum;
        
    }

}
